/**
 * Export all Paragraph Style IDs (UID) and Names to CSV (UTF-8 with BOM)
 * InDesign ExtendScript
 */
(function () {
    if (app.documents.length === 0) {
        alert("请先打开一个 InDesign 文档。");
        return;
    }

    var doc = app.activeDocument;

    // 主函数：执行导出
    function exportParagraphStyles() {
        // 选择保存位置
        var outFile = File.saveDialog("保存段落样式列表为 CSV", "CSV:*.csv");
        if (!outFile) return;

        // 收集样式：包含所有段落样式（含组内样式与 [No Paragraph Style]）
        var styles = doc.allParagraphStyles;
        if (!styles || styles.length === 0) {
            alert("未找到任何段落样式。");
            return;
        }

        // 打开文件并写入 UTF-8 BOM
        outFile.encoding = "UTF-8";
        outFile.lineFeed = "Unix"; // CSV 更通用
        if (!outFile.open("w")) {
            alert("无法写入文件：\n" + outFile.fsName);
            return;
        }
        // 写入 BOM
        outFile.write("\uFEFF");

        // CSV 头
        outFile.writeln(csv(["UID", "Name"]));

        // 写入每行
        for (var i = 0; i < styles.length; i++) {
            var s = styles[i];
            // 忽略段落样式组（确保是 ParagraphStyle，而不是组对象）
            if (!s || s.constructor && s.constructor.name !== "ParagraphStyle") continue;

            // 有些特殊对象可能无效，做防御
            if (!s.isValid) continue;

            var uid = s.id;        // InDesign 脚本里的唯一标识
            var name = s.name;     // 样式名

            outFile.writeln(csv([uid, name]));
        }

        outFile.close();
        alert("导出完成：\n" + outFile.fsName);
    }

    // 简单 CSV 转义（遇到逗号、引号、换行时加双引号并转义引号）
    function csv(arr) {
        function esc(val) {
            if (val === null || val === undefined) return "";
            val = String(val);
            if (/[",\r\n]/.test(val)) {
                val = '"' + val.replace(/"/g, '""') + '"';
            }
            return val;
        }
        var out = [];
        for (var i = 0; i < arr.length; i++) out.push(esc(arr[i]));
        return out.join(",");
    }

    // 一次性撤销包装（符合你的偏好）
    app.doScript(
        exportParagraphStyles,
        ScriptLanguage.JAVASCRIPT,
        undefined,
        UndoModes.ENTIRE_SCRIPT,
        "导出段落样式 UID 与名称"
    );
})();
